import argon2 from "argon2-browser";
import message from "@arco-design/web-vue/es/message";
import { UnwrapRef } from "vue";
import { UserLoginRequest } from "../../generated";

class DoHash {
  static async hashPassword(
    password: UnwrapRef<UserLoginRequest["userPassword"]> | undefined
  ): Promise<string> {
    if (!password) throw new Error("Password cannot be empty");

    try {
      const hash = await argon2.hash({
        pass: password,
        salt: crypto.getRandomValues(new Uint8Array(16)), // 生成随机盐
        time: 2, // 计算时间成本（越高越安全，但性能影响大）
        mem: 65536, // 内存成本（单位 KB）
        parallelism: 1, // 并行度
        type: argon2.ArgonType.Argon2id, // Argon2id 适合存储密码
      });

      return hash.encoded; // 返回哈希后的密码
    } catch (error) {
      message.error("出错了.");
      throw error;
    }
  }
}

export default DoHash;
